import pandas as pd
import os
import re
from pypinyin import lazy_pinyin


input_file = r'C:\Users\AAA\Desktop\水杯架-v2.xlsx'
output_file = r'C:\Users\AAA\Desktop\水杯架-v3.xlsx'

def process_excel_file(file_path, output_file_path):
    """
    处理Excel文件，进行拼音对比和检查

    参数:
        file_path: 输入Excel文件路径
        output_file_path: 输出Excel文件路径
    """
    # 检查文件是否存在
    if not os.path.exists(file_path):
        print(f"文件 {file_path} 不存在")
        return

    try:
        # 读取Excel文件
        df = pd.read_excel(file_path, engine='openpyxl')
        print(f"成功读取文件: {file_path}")

        # 处理每一行数据
        for index, row in df.iterrows():
            # 处理title和en_title列
            title = str(row.get('title', ''))
            en_title = str(row.get('en_title', ''))

            # 获取title中的所有中文字符
            chinese_chars = [char for char in title if '\u4e00' <= char <= '\u9fff']

            # 获取en_title中的所有单词
            en_title_words = en_title.split()

            # 检查en_title中的单词是否包含title中中文的拼音
            check_result = []
            for char in chinese_chars:
                # 获取拼音（忽略声调）
                pinyin_list = lazy_pinyin(char)
                for pinyin_str in pinyin_list:
                    # 检查en_title中的单词是否包含该拼音
                    for word in en_title_words:
                        if pinyin_str.lower() in word.lower():
                            check_result.append(char)
                            break

            # 将结果添加到新列title_check
            df.at[index, 'title_check'] = ','.join(check_result) if check_result else ''

            # 处理BriefIntroduction和ProductAttributes列
            brief_intro = row.get('BriefIntroduction', '{}')
            product_attrs = row.get('ProductAttributes', '{}')

            # 尝试将字符串转换为字典
            try:
                brief_dict = eval(brief_intro) if isinstance(brief_intro, str) else brief_intro
                product_dict = eval(product_attrs) if isinstance(product_attrs, str) else product_dict
            except:
                brief_dict = {}
                product_dict = {}
                print(f"警告：第 {index + 1} 行的BriefIntroduction或ProductAttributes格式不正确")

            # 将BriefIntroduction和ProductAttributes的值转换为字符串
            brief_values = ' '.join(brief_dict.values()) if isinstance(brief_dict, dict) else str(brief_dict)
            product_values = ' '.join(product_dict.values()) if isinstance(product_dict, dict) else str(product_dict)

            # 提取ProductAttributes中的所有中文字符
            product_chinese_chars = re.findall(r'[\u4e00-\u9fff]', product_values)

            # 检查BriefIntroduction中的值是否包含ProductAttributes中中文的拼音
            value_check_result = []
            for char in product_chinese_chars:
                # 获取拼音（忽略声调）
                pinyin_list = lazy_pinyin(char)
                for pinyin_str in pinyin_list:
                    # 检查BriefIntroduction中的值是否包含该拼音
                    # 清除BriefIntroduction中的非字母字符并转换为小写
                    cleaned_brief_values = re.sub(r'[^a-zA-Z]', '', brief_values).lower()
                    if pinyin_str.lower() in cleaned_brief_values:
                        value_check_result.append(char)
                        break

            # 将结果添加到新列value_check
            df.at[index, 'value_check'] = ','.join(list(set(value_check_result))) if value_check_result else ''

        # 保存到新的Excel文件
        df.to_excel(output_file_path, index=False)
        print(f"处理完成，已保存到: {output_file_path}")

    except Exception as e:
        print(f"处理文件时出错: {e}")


# 使用示例
process_excel_file(input_file, output_file)